13.10 下拉列表

下拉列表像一个单选钮组,它是强制用户从一组可实现的选择中选择一个对象的方法。而且,它是一个实现这点的相当简洁的方法,也最易改变选择而不至使用户感到吃力(我们可以动态地改变单选钮,但那种方法显然不方便)。Java的选择框不像Windows中的组合框可以让我从列表中选择或输入自己的选择。在一个选择框中你只能从列表中选择仅仅一个项目。在下面的例子里,选择框从一个确定输入的数字开始,然后当按下一个按钮时,新输入的数字增加到框里。你将可以看到选择框的一些有趣的状态:

  1. //: Choice1.java
  2. // Using drop-down lists
  3. import java.awt.*;
  4. import java.applet.*;
  5. public class Choice1 extends Applet {
  6. String[] description = { "Ebullient", "Obtuse",
  7. "Recalcitrant", "Brilliant", "Somnescent",
  8. "Timorous", "Florid", "Putrescent" };
  9. TextField t = new TextField(30);
  10. Choice c = new Choice();
  11. Button b = new Button("Add items");
  12. int count = 0;
  13. public void init() {
  14. t.setEditable(false);
  15. for(int i = 0; i < 4; i++)
  16. c.addItem(description[count++]);
  17. add(t);
  18. add(c);
  19. add(b);
  20. }
  21. public boolean action (Event evt, Object arg) {
  22. if(evt.target.equals(c))
  23. t.setText("index: " + c.getSelectedIndex()
  24. + " " + (String)arg);
  25. else if(evt.target.equals(b)) {
  26. if(count < description.length)
  27. c.addItem(description[count++]);
  28. }
  29. else
  30. return super.action(evt, arg);
  31. return true;
  32. }
  33. } ///:~

文本字字段中显示的selected index,也就是当前选择的项目的序列号,在事件中选择的字符串就像action()的第二个参数的字符串符描述的一样好。

运行这个程序片时,请注意对Choice框大小的判断:在windows里,这个大小是在我们拉下列表时确定的。这意味着如果我们拉下列表,然后增加更多的项目到列表中,这项目将在那,但这个下拉列表不再接受(我们可以通过项目来滚动观察——注释④)。然而,如果我们在第一次拉下下拉列表前将所的项目装入下拉列表,它的大小就会合适。当然,用户在使用时希望看到整个的列表,所以会在下拉列表的状态里对增加项目到选择框里加以特殊的限定。

④:这一行为显然是一种错误,会Java以后的版本里解决。